package cloud.xiangyixiang.www.spring.boot.java.basics.controller;

import cloud.xiangyixiang.www.spring.boot.java.basics.utils.Generic;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * JAVA Generics 泛型
 * </p>
 *
 * @author zhixinglu
 * @date 2023/9/5 10:18
 */
public class JavaGenericController {

    public static void main(String[] args) {

        description();

        test1();

        test2();
    }

    /**
     * 介绍描述
     */
    public static void description(){
        System.out.println("介绍描述: ========================");

        System.out.println("Java 泛型（generics）是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制，该机制允许程序员在编译时检测到非法的类型。");
        System.out.println("泛型的本质是参数化类型，也就是说所操作的数据类型被指定为一个参数。");


        System.out.println();
    }

    private static void test1(){
        List<String> list = new ArrayList<>();
        list.add("致敬未知");
        list.add("知行录");
        // list.add(30);
        for (int i = 0; i < list.size(); i++) {
            String str = list.get(i);
            System.out.println("泛型测试，str = " + str);
        }

        System.out.println();
    }

    private static void test2() {
        //泛型的类型参数只能是类类型（包括自定义类），不能是简单类型
        //传入的实参类型需与泛型的类型参数类型相同，即为Integer.
        Generic<Integer> genericInteger = new Generic<>(123456);
        //传入的实参类型需与泛型的类型参数类型相同，即为String.
        Generic<String> genericString = new Generic<>("江疏影");
        System.out.println("泛型测试，key is "+genericInteger.getKey());
        System.out.println("泛型测试，key is "+genericString.getKey());
    }

}
